package com.cy.pj.sys.service.impl;

import java.util.List;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import com.cy.pj.common.exception.ServiceException;
import com.cy.pj.common.pojo.PageObject;
import com.cy.pj.sys.dao.SysLogDao;
import com.cy.pj.sys.pojo.Category;
import com.cy.pj.sys.pojo.SysLog;
import com.cy.pj.sys.service.SysLogService;

@Service
public class SysLogServiceImpl implements SysLogService {

	@Autowired
	private SysLogDao sysLogDao;
	
	
	/**
	 * 查询所有的日志信息，并对从客户端提交过来的信息进行校验
	 */
	@Override
	public PageObject<SysLog> findPageObjects(String username, Integer pageCurrent) {
		//1.先校验页码值是否正确
		if(pageCurrent==null||pageCurrent<1)
			throw new IllegalArgumentException("当前页码值出现错误");
		//2.根据用户名查询总记录数并进行校验
		int rowCount = sysLogDao.getRowCount(username);
		if(rowCount==0)
			throw new ServiceException("系统没有查询到对应记录，请输入正确的用户名");
		//3.定义一次查询几条记录以及查询的起始位置
		int pageSize=5;//每页最多能显示多少条记录
		int startIndex=(pageCurrent-1)*pageSize;//开始位置
		//4.根据用户名以及开始位置和最大查询记录   进行查询，封装到List集合中
		List<SysLog> records = sysLogDao.findPageObjects(username, startIndex, pageSize);
		//5.将List集合与当前页码、最大记录数。总记录数通过有参构造封装到实体类中并返回给调用者
		PageObject<SysLog> pageObject = new PageObject<>(pageCurrent, pageSize, rowCount, records);
		return pageObject;
	}

	
	/**
	 * 删除日志
	 */
	@RequiresPermissions("sys:log:delete")
	@Override
	public int deleteObjects(Integer... ids) {
		if(ids==null||ids.length==0)
			throw new IllegalArgumentException("请选择需要删除的日志");
		int rows;
		try {
			rows = sysLogDao.deleteObjects(ids);
		} catch (Exception e) {
			e.printStackTrace();
			throw new ServiceException("系统错误，请稍后再试");
		}
		if(rows==0)
			throw new ServiceException("记录可能已经不存在");
			//5.返回结果
		return rows;
	}

	
	//Excel导出
	@Override
	public List<Category> findExcel() {
		List<Category> list = sysLogDao.findExcel();
		return list;
	}

	
	//新增日志信息
	@Async	//使用此注解描述的方法会运行在由spring框架提供的一个线程中
	@Override
	public void saveObject(SysLog entity) {
		sysLogDao.insertObject(entity);
	}

	
	








}
